/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Planificacion.Algoritmo;

import java.util.ArrayList;
import javax.print.attribute.standard.MediaSize.Other;

/**
 *
 * @author Tatooine
 */
public class Vehículo implements Comparable<Object>{
    private int IdVehiculo;
    private int Tipo; //si 0 es moto, si 1 es auto
    private int NumProdContiene;//Número de productos que contiene en un instante dado
    private int Velocidad;
    private int Capacidad;
    private int CostoXKm;
    private ArrayList<Turno> Turnos; //Un vehículo tiene varios turnos. De 0 a NumProductos-1
    private int DistanciaAcumulada;//Se guardará distancia acumulada, solo para obtenter FO
    private double FO;//Función objetivo.Se guardará temporalmente en cada corrida
    

    public Vehículo(int idVehiculo,int tipo,int velocidad, int capacidad,int CostoKm,int NumProductos,Coordenada Origen){
        this.IdVehiculo=idVehiculo;
        this.Tipo=tipo;
        this.NumProdContiene=0;//en un inicio siempre será 0
        this.Velocidad=velocidad;
        this.Capacidad=capacidad;
        this.DistanciaAcumulada=0;//en un inicio siempre será 0
        this.CostoXKm=CostoKm;
        this.FO=0;//en un inicio siempre será 0
        this.Turnos =new ArrayList();
        for (int i = 0; i < (NumProductos/4); i++) {//Creo un array de turnos para cada vehículo. En el peor de los casos 
            Turnos.add(new Turno(i,Origen));           //el número de turnos será igual al número de productos
        }
    }
    
    public int getTipo() {
        return Tipo;
    }
    
    public void setTipo(int Tipo) {
        this.Tipo = Tipo;
    }

    public int getCapacidad() {
        return Capacidad;
    }

    public void setCapacidad(int Capacidad) {
        this.Capacidad = Capacidad;
    }

    public int getNumProdContiene() {
        return NumProdContiene;
    }

    public void setNumProdContiene(int NumProdContiene) {
        this.NumProdContiene = NumProdContiene;
    }

    public int getVelocidad() {
        return Velocidad;
    }

    public void setVelocidad(int Velocidad) {
        this.Velocidad = Velocidad;
    }

    public int getDistanciaAcumulada() {
        return DistanciaAcumulada;
    }

    public void setDistanciaAcumulada(int DistanciaAcumulada) {
        this.DistanciaAcumulada = DistanciaAcumulada;
    }

    public int getIdVehiculo() {
        return IdVehiculo;
    }

    public void setIdVehiculo(int IdVehiculo) {
        this.IdVehiculo = IdVehiculo;
    }

    public double getFO() {
        return FO;
    }

    public void setFO(double FO) {
        this.FO = FO;
    }

    public ArrayList<Turno> getTurnos() {
        ArrayList<Turno>aux=new ArrayList();
        aux.addAll(this.Turnos);
        return aux;
    }

    public void setTurnos(ArrayList<Turno> Turnos) {
        this.Turnos = Turnos;
    }

    public int getCostoXKm() {
        return CostoXKm;
    }

    public void setCostoXKm(int CostoXKm) {
        this.CostoXKm = CostoXKm;
    }
    
    @Override
    public int compareTo(Object o) {
        double num1=((Vehículo)o).getFO();
        double num2=this.getFO();
        if(num1>num2) return -1;
        else if(num1==num2) return 0;
        else return 1;
        
    }
}

